package com.ai.service.made;

import com.ai.common.CommonResponse;
import com.ai.entity.made.OpcNodeInfo;
import com.ai.entity.made.page.OpcNodeInfoPage;
import com.ai.model.dto.OpcNodeInfoDto;
import com.baomidou.mybatisplus.core.metadata.IPage;
import com.baomidou.mybatisplus.extension.service.IService;
import org.eclipse.milo.opcua.sdk.client.api.subscriptions.UaMonitoredItem;
import org.eclipse.milo.opcua.stack.core.types.builtin.NodeId;

/**
 * <p>
 *  服务类
 * </p>
 *
 * @author jiaok
 * @since 2024-11-14
 */
public interface IOpcNodeInfoService extends IService<OpcNodeInfo> {

    /**
     * 创建新的node通信节点
     * @param opcNodeInfoDto 节点信息
     * @return
     */
    CommonResponse<String> add(OpcNodeInfoDto opcNodeInfoDto);

    /**
     * 处理读取到的opc节点内容
     * @param nodeId opc节点
     * @param value 读取到的实际值
     */
    void handleNodeValue(NodeId nodeId, String value);

    /**
     * 获取指定opcServer下的所有节点名称以及id
     * @param deviceServerId id
     * @Param deviceType 设备类型
     * @return
     */
    CommonResponse getOpcNodeNameList(String deviceServerId,String deviceType);

    /**
     * 获取指定opcServer下的所有节点名称以及id
     * @param opcServerId id
     * @return
     */
    CommonResponse getOpcNodeNameList(String opcServerId);

    /**
     * 删除opc节点
     * @param opcDeviceId opcDeviceId
     * @return
     */
    CommonResponse<String> delete(String opcDeviceId);

    /**
     * 修改opc节点信息
     * @param opcNodeInfoDto dto
     * @return
     */
    CommonResponse<String> edit(OpcNodeInfoDto opcNodeInfoDto);


    /**
     * opc设备节点分页
     * @param page
     * @return
     */
    IPage selectByPage(OpcNodeInfoPage page);

    /**
     * 连接该opc下的所有node
     * @param opcServerId - opc
     */
    void nodeConnectOpcServer(String opcServerId);

    /**
     * opcServer连接成功但是监控的点位为空，尝试重新订阅监听节点信息
     * @param opcServerId opcServerId
     */
    void reSubscribeOpcNode(String opcServerId);

}
